#ifndef OTA_H
#define OTA_H
#include <stdint.h>

typedef struct __attribute__((packed))
{
    uint8_t cmd; // 0x01 ota 开始ota, 0x02 开始接收 data, 0x03数据发送完成 end
    uint32_t total_size; // 总ota文件大小
    uint32_t offset;	// 当前已经发送的偏移
	uint16_t chunk_len;    // 本片段数据长度
	uint8_t chunk[0]; // 当前发送数据内容
} ota_hdr_t;

typedef struct {
    uint32_t magic;       // 魔术字，用来标识这个结构是否有效
    uint32_t fw_size;     // 新固件的大小（字节数），一般 ≤ 暂存区大小
    uint32_t fw_crc32;    // 新固件的 CRC32 校验值
    uint32_t committed;   // 升级标志：0x5AA55AA5 表示下次重启要执行覆盖
} ota_flag_t;

void uart_ota_data(uint8_t *uart3_rx_buff,uint16_t size);

void OTA_SwapToBase_FromStaging(uint32_t staging_addr, uint32_t size);
#endif
